package leetcode.alg.demo;

/**
 * 将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 
 *
 * 示例：
 *
 * 输入：1->2->4, 1->3->4
 * 输出：1->1->2->3->4->4
 *
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode-cn.com/problems/merge-two-sorted-lists
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 */
public class Merge_two_sorted_lists {
    public static void main(String[] args){
        ListNode nodeA_1 = new ListNode(1);
        ListNode nodeA_2 = new ListNode(2);
        ListNode nodeA_4 = new ListNode(4);
        nodeA_1.next = nodeA_2;
        nodeA_2.next = nodeA_4;

        ListNode nodeB_1 = new ListNode(1);
        ListNode nodeB_3 = new ListNode(3);
        ListNode nodeB_4 = new ListNode(4);
        nodeB_1.next = nodeB_3;
        nodeB_3.next = nodeB_4;

        System.out.println(mergeTwoLists(nodeA_1, nodeB_1));
    }

    public static ListNode mergeTwoLists(ListNode l1, ListNode l2) {
        if(l1 == null){
            return l2;
        }else if(l2 == null){
            return l1;
        }else if(l1.val < l2.val){
            l1.next = mergeTwoLists(l1.next, l2);
            return l1;
        }else{
            l2.next = mergeTwoLists(l1, l2.next);
            return l2;
        }
    }



    static class ListNode{
        int val;
        ListNode next;
        ListNode(int x) { val = x; }

        @Override
        public String toString() {
            return "ListNode{" +
                    "val=" + val +
                    ", next=" + next +
                    '}';
        }
    }
}
